package com.bill.concurrency.example.singleton;

import com.bill.concurrency.annotations.NotThreadSafe;
import com.bill.concurrency.annotations.ThreadSafe;
import lombok.extern.slf4j.Slf4j;

/**
 * 构建一个单例类。
 * 饿汉模式。单例实例在装载类对象就实例化。
 * 有以下缺点。如果类的实例化是一个漫长的过程，则在装载类时会变化很慢，可能存在性能问题。
 * 使用饿汉汉模式，如果没有实例的调用，则会造成资源的浪费。
 * 所以，在考虑使用饿汉模式时，一定要考虑2个问题。
 * 第一：类的构造函数中不能太多的逻辑。
 * 第二：这个类一定要被使用。
 */
@Slf4j
@ThreadSafe
public class SingletonExample2 {
    //单例对象在构建类时就实例化
    private static SingletonExample2 instance=new SingletonExample2();
    /**
     * 私有构造器，一定要有。
     */
    private SingletonExample2(){

    }

    //静态工厂方法。
    public static SingletonExample2 getInstance(){
          return instance;
    }
}
